package com.eastfair.auth.service;

import com.eastfair.auth.dto.OrganizationDTO;
import com.eastfair.auth.entity.Organization;
import com.eastfair.core.base.R;

import java.util.List;

/**
 * <p>
 * 公司组织操作业务接口
 *
 * </p>
 *
 * @author ligang
 * @date 2021-07-16
 */
public interface CompanyOrganizationService {
    /**
     * 创建项目下的公司分类
     * @param orgId  项目组织id
     * @param projectId  项目id
     * @return
     */
    R<Organization> createCompanyClassifyOfProject(Long orgId,Long projectId);

    /**
     * 创建公司分类
     * @param orgId  项目组织id
     * @param projectId  项目id
     * @return
     */
    R<Organization> createCompanyClassify(Long orgId,Long projectId);

    /**
     * 添加公司到项目（资源池组织）
     *
     * @param organizationDTO 组织节点实体
     * @return
     */
    R<Organization> addCompany(OrganizationDTO organizationDTO);
    /**
     * 修改公司到项目（资源池组织）
     *
     * @param organizationDTO 组织节点实体
     * @return
     */
    R<Organization> updCompany(OrganizationDTO organizationDTO);
    /**
     * 查找资源所在的公司节点信息（资源池组织）
     *
     * @param resourceId 资源id
     * @return
     */
    Organization findCompany(Long resourceId);


    /**
     * 添加公司到项目（项目组织）
     *
     * @param projectId    项目id
     * @param companyId    公司id
     * @param resourceName 节点名称
     * @return
     */
    R<Organization> addCompanyOfProjectClassify(Long projectId, Long companyId, String resourceName);


    /**
     * 将节点上的角色赋值到该节点资源对应的公司类型节点上
     * <p>
     * 说明：组织1：项目下的公司分类包含公司信息（项目级别的组织）
     * 组织2：公司组下的公司信息（公司级别组织）
     * 之所以将两个组织分开是因为员工应该在组织2里，不应该在组织1里。两者是单独的组织
     * 两个组织的资源id是一致的，当项目级别的组织赋角色给某公司时，公司组中的该公司也需要赋值同样的角色
     * 类似将节点的角色复制到另一个节点上，两个节点的纽带关系是资源id一致
     *
     * @param orgId 组织节点id
     * @return
     */
    R addRoleOfResource(Long orgId);

    /**
     * 将角色在该节点资源对应的公司类型节点上剔除
     * <p>
     * 说明：组织1：项目下的公司分类包含公司信息（项目级别的组织）
     * 组织2：公司组下的公司信息（公司级别组织）
     * 之所以将两个组织分开是因为员工应该在组织2里，不应该在组织1里。两者是单独的组织
     * 两个组织的资源id是一致的，当项目级别的组织赋角色给某公司时，公司组中的该公司也需要赋值同样的角色
     * 类似将节点的角色复制到另一个节点上，两个节点的纽带关系是资源id一致
     *
     * @param orgId 组织节点id
     * @return
     */
    R removeRoleOfResource(Long orgId);


    /**
     * 剔除公司超级管理员
     *
     * @param resourceId 资源id
     * @return
     */
    R breakSysAdminUseridOfCompany(Long resourceId);

    /**
     * 添加公司超级管理员,只能有一个管理员
     *
     * @param resourceId 资源id
     * @return
     */
    R addSysAdminUseridOfCompany(Long resourceId, Long userId);


    /**
     * 剔除公司员工
     * @param resourceId 资源id
     * @param removeUserIds 剔除用户id
     * @return
     */
    R removeUseridOfCompany(Long resourceId, List<Long> removeUserIds);

    /**
     * 添加公司员工
     * @param resourceId 资源id
     * @param userIds 用户id
     * @return
     */
    R addUseridOfCompany(Long resourceId, List<Long> userIds);



    /**
     * 展商员工组剔除员工
     * @param resourceId 资源id
     * @param removeUserIds 剔除用户id
     * @return
     */
    R removeUseridOfExhibition(Long resourceId, List<Long> removeUserIds);

    /**
     * 展商员工组添加员工
     * @param resourceId 资源id
     * @param userIds 用户id
     * @return
     */
    R addUseridOfExhibition(Long resourceId, List<Long> userIds);


    /**
     * 查询
     * @param resourceId
     * @return
     */
    Organization findStaffOrganization(Long resourceId);



}
